perm filename RUNNER.SAI[VIS,HPM] blob sn#146238 filedate 1975-02-18 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "RUNNER"
C00008 ENDMK
C⊗;
BEGIN "RUNNER"
REQUIRE "VIXNIC.SAI[VIS,HPM]" SOURCE_FILE;
REQUIRE "WIXNIC.SAI[VIS,HPM]" SOURCE_FILE;
REQUIRE "DDEXT.SAI[VIS,HPM]" SOURCE_FILE;

INTEGER HEIGHT,WIDTH,BITS,NPIC,FILTERWINDOW,INTERESTWINDOW,CORRELWINDOW;

HEIGHT←WIDTH←256; BITS←4; NPIC←8;
FILTERWINDOW←20;
INTERESTWINDOW←7;
CORRELWINDOW←20;

   BEGIN
   INTEGER I,NFEATS;
   INTEGER ARRAY P1[0:1,0:PICDIM(HEIGHT,WIDTH,BITS)-1],
                 P2[0:1,0:PICDIM(HEIGHT%2,WIDTH%2,BITS+2)-1],
                 P4[0:NPIC-1,0:PICDIM(HEIGHT%4,WIDTH%4,BITS+4)-1];
   INTEGER ARRAY FEATURE[0:NPIC-1,1:100,0:2];
   comment   third dimension 0 - value (interest or correlation)
                             1 - y position of the feature
                             2 - x position of the feature;
   DEFINE  VAL="0", X="1", Y="2";
   FOR I←0 STEP 1 UNTIL NPIC-1 DO
      BEGIN
         BEGIN
         INTEGER ARRAY T[0:PICDIM(HEIGHT,WIDTH,BITS)-1];
         MAKPIX(HEIGHT,WIDTH,BITS,T[0]);
         CAMPIX(0,1,1,1,8,T[0]);
         CLEAN(T[0]);
         PASSHI(T[0],FILTERWINDOW,P1[I MOD 2,0]);
         HAFPIC(P1[I MOD 2,0],P2[I MOD 2,0]);
         HAFPIC(P2[I MOD 2,0],P4[I,0]);
	 END;
      IF I=0 THEN 
         BEGIN

         comment  this is the first picture in the sequence, so apply
                  the interest operator to find some features to track;

         INTEGER IAV,I,J;
         INTEGER ARRAY INTEREST[-2:(WIDTH-1)%INTERESTWINDOW-1,
                                 0:(HEIGHT-1)%INTERESTWINDOW-1];
         IAV←INTRST(P1[0,0],INTERESTWINDOW,INTEREST[0,0]);
         NFEATS←0;

         comment  record the found features in the FEATURE array;

         FOR I←0 STEP 1 UNTIL (HEIGHT-1)%INTERESTWINDOW-1 DO
         FOR J←0 STEP 1 UNTIL (WIDTH-1)%INTERESTWINDOW-1 DO
            IF INTEREST[I,J]≥IAV ∧ (INTEREST[I,J] LAND 1)=0 THEN
               BEGIN
               NFEATS←NFEATS+1;
               FEATURE[0,NFEATS,VAL]←INTEREST[I,J];
               FEATURE[0,NFEATS,Y]←(2*I+1)*INTERESTWINDOW%2;
               FEATURE[0,NFEATS,X]←(2*J+1)*INTERESTWINDOW%2;
               END;
         END
      ELSE
         BEGIN

         comment  for second and subsequent pictures, find the features
                  in the previous picture in the current one;

         INTEGER J;
         FOR J←1 STEP 1 UNTIL NFEATS DO IF FEATURE[I-1,J,VAL]≠0 THEN
            BEGIN
            INTEGER IL1,JL1,IH1,JH1,IL2,JL2,IH2,JH2,T;
            IL1←FEATURE[I-1,J,Y]-CORRELWINDOW%2;
            JL1←FEATURE[I-1,J,X]-CORRELWINDOW%2;
            IH1←IL1+CORRELWINDOW; JH1←JL1+CORRELWINDOW;
            IL2←IL1-CORRELWINDOW; IH2←IH2+CORRELWINDOW;
            JL2←JL1-CORRELWINDOW; JH2←JH2+CORRELWINDOW;

            IL2←IL2%4; IH2←IH2%4; JL2←JL2%4; JH2←JH2%4;
            T←BSTCOR(P4[I-1,0],JL1%4,IL1%4,JH1%4,IH1%4,
               P4[I,0],JL2,IL2,JH2,IH2);

            IL2←2*IL2-10; IH2←2*IH2+10; JL2←2*JL2-10; JH2←2*JH2+10;
            T←BSTCOR(P2[(I-1) MOD 2,0],JL1%2,IL1%2,JH1%2,IH1%2,
               P2[I MOD 2,0],JL2,IL2,JH2,IH2);

            IL2←2*IL2-10; IH2←2*IH2+10; JL2←2*JL2-10; JH2←2*JH2+10;
            T←BSTCOR(P1[(I-1) MOD 2,0],JL1,IL1,JH1,IH1,
               P1[I MOD 2,0],JL2,IL2,JH2,IH2);